a11y: Make submenu code handle non-existing submenus
authorBenjamin Otte <otte@redhat.com>
Wed, 6 Jul 2011 18:55:11 +0000 (20:55 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 6 Jul 2011 18:55:11 +0000 (20:55 +0200)
As we're going to merge the two accessibles for submenus, we need to
make sure the code that insisted on submenus can handle the case where
no submenu exists.

gtk/a11y/gtksubmenuitemaccessible.c

index f9a0453a01eb71b71959e60d7cb7b3233fb2429d..7d0695e6c33c6f067dcffa1ad3ba0752712028e7 100644 (file)
@@ -41,10 +41,11 @@ gtk_submenu_item_accessible_initialize (AtkObject *obj,
   ATK_OBJECT_CLASS (gtk_submenu_item_accessible_parent_class)->initialize (obj, data);
 
   submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (data));
-  g_return_if_fail (submenu);
-
-  g_signal_connect (submenu, "add", G_CALLBACK (menu_item_add_gtk), NULL);
-  g_signal_connect (submenu, "remove", G_CALLBACK (menu_item_remove_gtk), NULL);
+  if (submenu)
+    {
+      g_signal_connect (submenu, "add", G_CALLBACK (menu_item_add_gtk), NULL);
+      g_signal_connect (submenu, "remove", G_CALLBACK (menu_item_remove_gtk), NULL);
+    }
 
   obj->role = ATK_ROLE_MENU;
 }
@@ -78,7 +79,9 @@ gtk_submenu_item_accessible_add_selection (AtkSelection *selection,
     return FALSE;
 
   submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
-  g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), FALSE);
+  if (submenu == NULL)
+    return FALSE;
+
   shell = GTK_MENU_SHELL (submenu);
   kids = gtk_container_get_children (GTK_CONTAINER (shell));
   length = g_list_length (kids);
@@ -98,7 +101,6 @@ gtk_submenu_item_accessible_add_selection (AtkSelection *selection,
 static gboolean
 gtk_submenu_item_accessible_clear_selection (AtkSelection *selection)
 {
-  GtkMenuShell *shell;
   GtkWidget *widget;
   GtkWidget *submenu;
 
@@ -107,10 +109,11 @@ gtk_submenu_item_accessible_clear_selection (AtkSelection *selection)
     return FALSE;
 
   submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
-  g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), FALSE);
-  shell = GTK_MENU_SHELL (submenu);
+  if (submenu == NULL)
+    return FALSE;
+
+  gtk_menu_shell_deselect (GTK_MENU_SHELL (submenu));
 
-  gtk_menu_shell_deselect (shell);
   return TRUE;
 }
 
@@ -132,7 +135,9 @@ gtk_submenu_item_accessible_ref_selection (AtkSelection *selection,
     return NULL;
 
   submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
-  g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), NULL);
+  if (submenu == NULL)
+    return NULL;
+
   shell = GTK_MENU_SHELL (submenu);
 
   item = gtk_menu_shell_get_selected_item (shell);
@@ -158,7 +163,9 @@ gtk_submenu_item_accessible_get_selection_count (AtkSelection *selection)
     return 0;
 
   submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
-  g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), 0);
+  if (submenu == NULL)
+    return 0;
+
   shell = GTK_MENU_SHELL (submenu);
 
   if (gtk_menu_shell_get_selected_item (shell) != NULL)
@@ -183,7 +190,9 @@ gtk_submenu_item_accessible_is_child_selected (AtkSelection *selection,
     return FALSE;
 
   submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
-  g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), FALSE);
+  if (submenu == NULL)
+    return FALSE;
+
   shell = GTK_MENU_SHELL (submenu);
 
   item = gtk_menu_shell_get_selected_item (shell);
@@ -214,7 +223,9 @@ gtk_submenu_item_accessible_remove_selection (AtkSelection *selection,
     return FALSE;
 
   submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
-  g_return_val_if_fail (GTK_IS_MENU_SHELL (submenu), FALSE);
+  if (submenu == NULL)
+    return FALSE;
+
   shell = GTK_MENU_SHELL (submenu);
 
   item = gtk_menu_shell_get_selected_item (shell);